/**
 * 建立一个闭包，在闭包中存储函数最后一次执行成功的时间戳lastExeTime；
然后在每一次尝试性执行此函数的额时候，获取当前的时间戳currentTime，并与最后一次执行成功的时间戳做差const gap = currentTime - lastExeTime；
如果gap的值大于规定值，则证明无需节流，执行函数，然后更新lastExeTime的值；
如果gap的值小于规定值，则证明还在节流，这个时候什么都不需要做。

 * @param {*} fn 
 * @param {*} delay  
 * @returns 
 */
function throttle(fn, delay) {
  let lastExeTime = 0;
  return function (...args) {
    let currentTime = Date.now();
    if (currentTime - lastExeTime > delay) {
      lastExeTime = currentTime;
      // this
      fn.apply(this, args);
    }
  };
}

// 这个是开始执行，然后过了delay后触发才再次执行
function throttling(fn, delay) {
  let last = 0;
  return function () {
    console.log(2);
    let now = Date.now();
    if (last && now < last + delay) {
      last = now;
    } else {
      fn.apply(this, arguments);
      last = now;
    }
  };
}
